;
(function($) {

	/**
	 * @overview 此类是图表的抽象基类，所有图表组件都要继承此类，此类定义了图表的轮廓，包括标题，图例，提示框，脚注等组件。在此类中初始化了canvas对象。
	 * @component#iChart.Chart
	 * @extend#iChart.Painter
	 */
	$.Chart = $.extend($.Painter, {
		/**
		 * @cfg {TypeName}
		 */
		configure : function() {
			/**
			 * invoked the super class's configuration
			 */
			$.Chart.superclass.configure.apply(this, arguments);

			/**
			 * indicate the element's type
			 */
			this.type = 'chart';

			this.set({
				render : '',
				/**
				 * @cfg {Array} 必需属性,图表的数据源。
				 */
				data : [],
				/**
				 * @cfg {Number} 图表的宽度，单位px。
				 */
				width : undefined,
				/**
				 * @cfg {Number} 图表的高度，单位px。
				 */
				height : undefined,
				/**
				 * @cfg {String} 组件中context的lineJoin的值。(默认为'round')
				 */
				lineJoin : 'round',
				/**
				 * @cfg {String} 绘主图区在图表中的水平对齐位置。(默认为'center')
				 * 可选值为：
				 * @Option 'left'
				 * @Option 'center'
				 * @Option 'right'
				 */
				align : 'center',
				/**
				 * @cfg {Boolean} 是否当鼠标进入时触发默认的手型鼠标样式。(默认为true)
				 */
				default_mouseover_css : true,
				/**
				 * @cfg {Boolean} 是否忽略touchmove事件，当设备支持touch时，默认情况下，在图表中组件区域滑动时会屏蔽浏览器本身的行为，比如:滑动页面。(默认为false)
				 */
				turn_off_touchmove : false,
				/**
				 * @cfg {Boolean} 是否显示为百分比值。(默认为false)
				 */
				showpercent : false,
				/**
				 * @cfg {Number} 百分比小数点精度(小数点后几位)。(default to 1)
				 */
				decimalsnum : 1,
				/**
				 * @cfg {Object/String}标题的配置项，若给出字符串，则用默认配置进行渲染标题，若给出对象，则配置为 <link>iChart.Text</link>对象。如果text属性为空则不显示标题。
				 */
				title : {
					text:'',
					fontweight : 'bold',
					/**
					 * Specifies the font-size in pixels of title.(default to 20)
					 */
					fontsize : 20,
					/**
					 * Specifies the height of title will be take.(default to 30)
					 */
					height : 30
				},
				/**
				 * @cfg {Object} 副标题的配置项，若给出字符串，则用默认配置进行渲染标题，若给出对象，则配置为 <link>iChart.Text</link>对象。如果标题或者副标题的text属性为空则不显示副标题。
				 */
				subtitle : {
					text:'',
					fontweight : 'bold',
					/**
					 * Specifies the font-size in pixels of title.(default to 16)
					 */
					fontsize : 16,
					/**
					 * Specifies the height of title will be take.(default to 20)
					 */
					height : 20
				},
				/**
				 * @cfg {Object/String}脚注的配置项，若给出字符串，则用默认配置进行渲染标题，若给出对象，则配置为 <link>iChart.Text</link>对象。如果text属性为空则不显示脚注。
				 */
				footnote : {
					text:'',
					/**
					 * Specifies the font-color of footnote.(default to '#5d7f97')
					 */
					color : '#5d7f97',
					/**
					 * Specifies the height of title will be take.(default to 20)
					 */
					height : 20
				},
				/**
				 * @inner {String} Specifies how align title vertically Available value are:
				 * @Option 'top'
				 * @Option 'middle' Only applies when title_writingmode = 'tb'
				 * @Option 'bottom'
				 */
				title_valign : 'top',
				/**
				 * @cfg {Boolean} 是否启用过渡动画,false则跳过过渡动画.(默认为false)
				 */
				animation : false,
				/**
				 * @inner {Function} the custom funtion for animation
				 */
				doAnimationFn : $.emptyFn,
				/**
				 * @cfg {String} 启用动画的动作函数(默认为'ease-in-out')可选值有：
				 * @Option 'easeIn'
				 * @Option 'easeOut'
				 * @Option 'easeInOut'
				 * @Option 'linear'
				 */
				animation_timing_function : 'easeInOut',
				/**
				 * @cfg {Number} 指定动画持续时间，单位毫秒。此时间会与运行平台的FPS有关。(默认为1000)
				 */
				duration_animation_duration : 1000,
				/**
				 * @cfg {Object}图例的配置项.详情请参考 <link>iChart.Legend</link> Note:设置为false表示禁用图例。(默认为false)
				 */
				legend : false,
				/**
				 * @cfg {Number}设置绘图区的组件的显示层级为999，使其在最上层显示。
				 */
				z_index:999,
				/**
				 * @cfg {Object} 提示框的配置项.详情请参考 <link>iChart.Tip</link>  Note:设置为false表示禁用提示框。(默认为false)
				 */
				tip : false
			});

			/**
			 * register the common event
			 */
			this.registerEvent(
			/**
			 * @event 动画执行之前触发。仅当 <link>animation</link> 为 true 时生效。
			 * @paramter iChart.Chart#this
			 */
			'beforeAnimation',
			/**
			 * @event 动画执行完成时触发。仅当 <link>animation</link> 为 true 时生效。
			 * @paramter iChart.Chart#this
			 */
			'afterAnimation', 'animating');

			this.T = null;
			this.rendered = false;

			this.animationed = false;
			this.data = [];
			this.components = [];
			this.total = 0;
			
		},
		/**
		 * @method 关闭事件监听，调用此方法后，图表将不响应事件
		 * @return void
		 */
		eventOff:function(){this.stopEvent = true},
		/**
		 * @method 开启事件监听，调用此方法后，图表将继续响应事件
		 * @return void
		 */
		eventOn:function(){this.stopEvent = false},
		/**
		 * @method 获取主标题对象，不可用时返回undefined
		 * @return <link>iChart.Text</link>
		 */
		getTitle:function(){
			return this.title;
		},
		/**
		 * @method 获取副标题对象，不可用时返回undefined
		 * @return <link>iChart.Text</link>
		 */
		getSubTitle:function(){
			return this.subtitle;
		},
		/**
		 * @method 获取脚注对象，不可用时返回undefined
		 * @return <link>iChart.Text</link>
		 */
		getFootNote:function(){
			return this.footnote;
		},
		/**
		 * @method 根据最新属性重新装配图表组件。一般在更新图表时调用。
		 * @return void
		 */
		setUp:function(){
			this.redraw = false;
			this.T.clearRect();
			this.initialization = false;
			this.initialize();
		},
		/**
		 * @method 注册自定义组件
		 * @paramter <link>iChart.Custom</link>#component 要注册的组件
		 * @return void
		 */
		plugin : function(c) {
			c.inject(this);
			this.components.push(c);
			this.plugins(c);
		},
		/**
		 * @method 获取绘图区的尺寸。自定义的组件应该在绘图区进行绘制。返回对象包含以下属性：
		 * @property x:左上方x轴坐标
		 * @property y:左上方y轴坐标
		 * @property width:绘图区宽度，单位:px。
		 * @property height:绘图区高度，单位:px。
		 * @return object
		 */
		getDrawingArea:function(){
			return {
				x:this.get("l_originx"),
				x:this.get("t_originy"),
				width:this.get("client_width"),
				height:this.get("client_height")
			}
		}
	});
})(iChart);
// @end
